/*
 * @Author: your name
 * @Date: 2021-11-02 18:35:18
 * @LastEditTime: 2021-11-03 08:57:04
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \vue-source-code-snanndom\src\mySnabbdom\patchVnode_test.js
 */
/*
 * @Author: your name
 * @Date: 2021-11-02 17:46:11
 * @LastEditTime: 2021-11-02 18:27:57
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \vue-source-code-snanndom\src\mySnabbdom\patchVnode.js
 */
// -------------老旧的想法，算法不细致，----------
import createElment from './createElement'
export default function patchVnode(oldVnode, newVnode) {
    // 判断新旧节点是否是同一对象
    if (newVnode === oldVnode) return;
    if (newVnode.text && (!newVnode.children || !newVnode.children.length)) {
        console.log('新节点--含有text内容：', newVnode.text);
        if (newVnode.text != oldVnode.text) {
            // 如果新的虚拟节点中的text和老的虚拟节点的text不同，那么直接让新的text写入老的elm中即可，如果老的elm中的是children，也会被直接替换掉
            oldVnode.elm.innerText = newVnode.text
        }
    } else {
        console.log('新节点--没有text内容：-表示有children');
        if (oldVnode.children && oldVnode.children.length) {
            // 老的有children，最复杂的情况，新老都有children
            let un = 0; // 所有未处理节点的开头
            for (let i = 0; i < newVnode.children.length; i++) {
                let ch = newVnode.children[i];
                let isExist = false;
                for (let j = 0; j < oldVnode.children.length; j++) {
                    let oldCh = oldVnode.children[j];
                    if (oldCh.sel == ch.sel && oldCh.key == ch.key) {
                        // 老节点和新节点拥有相同子节点
                        isExist = true
                    }

                }
                if (!isExist) {
                    // 将没有的新dom子节点添加到指定位置 - 不处理位置不同的问题
                    console.log(ch, i)
                    let dom = createElment(ch);
                    ch.elm = dom
                    if (un < oldVnode.children.length) {
                        oldVnode.elm.insertBefore(dom, oldVnode.children[un].elm);
                    } else {
                        oldVnode.elm.appendChild(dom);
                    }

                } else {
                    // 让处理的结点指针下移
                    un++
                    if (i != j) {

                    }
                }
            }
        } else {
            console.log('老节点没有children');
            // 清空老的inerHTML
            oldVnode.elm.innerHTML = ''
            // 添加新的children
            for (let i = 0; i < newVnode.children.length; i++) {
                let dom = createElment(newVnode.children[i])
                oldVnode.elm.appendChild(dom)
            }
        }
    }
}